﻿using System;
using System.Collections;
using System.Collections.Generic;
using nkstdgia.common.ThamDinhGia.BusinessObjects;
using nkstdgia.excel.export;

namespace nkstdgia.main.report
{
    public class GIADOANDUONG_QUAN
    {


        public static Hashtable giadoanduongReportMapRow = null;
        List<String> danhSachMergeCell = new List<string>();

        private long _QUAN;
        public long QUAN
        {
            get
            {
                return _QUAN;
            }
            set
            {
                _QUAN = value;
            }
        }

        private int _iMAX_SOLUONG_GIA = 0;

        public int IMAX_SOLUONG_GIA
        {
            get { return _iMAX_SOLUONG_GIA; }
            set { _iMAX_SOLUONG_GIA = value; }
        }

        private int _MAX_SOLUONG_GIA_QUAN = 1;

        public int MAX_SOLUONG_GIA_QUAN
        {
            get { return _MAX_SOLUONG_GIA_QUAN; }
            set { _MAX_SOLUONG_GIA_QUAN = value; }
        }

        private List<GIADOANDUONG_DKS> _DUONG;

        public List<GIADOANDUONG_DKS> DUONG
        {
            get { return _DUONG; }
            set { _DUONG = value; }
        }

        public GIADOANDUONG_QUAN()
        {

            _DUONG = new List<GIADOANDUONG_DKS>();
            giadoanduongReportMapRow = new Hashtable();
            giadoanduongReportMapRow.Add("STT", 1);
            giadoanduongReportMapRow.Add("DUONG", 2);
            giadoanduongReportMapRow.Add("DOANDUONG", 3);
            giadoanduongReportMapRow.Add("GIA", 4);
            giadoanduongReportMapRow.Add("DATAROW", 8);
        }

        private int _EndDataRow;

        public int EndDataRow
        {
            get { return _EndDataRow; }
            set { _EndDataRow = value; }
        }

        private Boolean _isValid;

        public Boolean isValid
        {
            get { return _isValid; }
            set { _isValid = value; }
        }

        public GIADOANDUONG_QUAN(DUONG_KHAO_SAT dks, GIA_DOAN_DUONG gia)
        {
            _QUAN = dks.QUAN;
            _DUONG = new List<GIADOANDUONG_DKS>();
            GIADOANDUONG_DKS duong = new GIADOANDUONG_DKS(dks, gia);
            _DUONG.Add(duong);

            giadoanduongReportMapRow = new Hashtable();
            giadoanduongReportMapRow.Add("STT", 1);
            giadoanduongReportMapRow.Add("DUONG", 2);
            giadoanduongReportMapRow.Add("DOANDUONG", 3);
            giadoanduongReportMapRow.Add("GIA", 4);
            giadoanduongReportMapRow.Add("DATAROW", 8);
        }

        public void AddDuong(GIADOANDUONG_DKS duong)
        {
            this._DUONG.Add(duong);
        }

        public void XuLiQuanDaTonTai(DUONG_KHAO_SAT dks, GIA_DOAN_DUONG gia)
        {
            int iDuongTonTai = KiemTraDuongTonTai(dks);
            if (iDuongTonTai == -1)
            {
                GIADOANDUONG_DKS duong = new GIADOANDUONG_DKS(dks, gia);
                _DUONG.Add(duong);
            }
            else
            {
                _DUONG[iDuongTonTai].XuLiKhiDuongDaTonTai(dks, gia);
            }
        
       }

        private int KiemTraDuongTonTai(DUONG_KHAO_SAT dks)
        {
            int rv = -1;
            for (int i = 0; i < _DUONG.Count; i++)
            {
                if (_DUONG[i].TEN_DUONG.Equals(dks.DUONG))
                {
                    rv = i;
                    break;
                }
            }
            return rv;
        }

        public void XuatGiaDoanDuong_QUAN(SpreedEdit handeler)
        {
            int columnDuong = Int32.Parse(GIADOANDUONG_QUAN.giadoanduongReportMapRow["DUONG"].ToString());
            int columnStt = Int32.Parse(GIADOANDUONG_QUAN.giadoanduongReportMapRow["STT"].ToString());
            int columnDataRow = Int32.Parse(GIADOANDUONG_QUAN.giadoanduongReportMapRow["DATAROW"].ToString());
            int iCurrRow = columnDataRow;
            for (int i = 0; i < this._DUONG.Count; i++)
            {
                _DUONG[i].XuatGiaDoanDuong_DUONG(handeler, iCurrRow, i + 1);

                // lấy thông tin merge cell
                if (_DUONG[i].soLuongDoanDuong() > 1)
                {
                    String sColumnSTT = ExcelCommand.GetExcelColumnName(columnStt);
                    String cellsIndex = sColumnSTT + iCurrRow + "-" + (sColumnSTT + (iCurrRow + _DUONG[i].soLuongDoanDuong() - 1));
                    danhSachMergeCell.Add(cellsIndex);
                    String sColumnDuong = ExcelCommand.GetExcelColumnName(columnDuong);
                    cellsIndex = sColumnDuong + iCurrRow + "-" + (sColumnDuong + (iCurrRow + _DUONG[i].soLuongDoanDuong() - 1));
                    danhSachMergeCell.Add(cellsIndex);
                    
                }

                iCurrRow += _DUONG[i].soLuongDoanDuong();
            }
        }

        public void TinhMaxSoLuongGia()
        {
            int iCurrentRow = Int32.Parse(GIADOANDUONG_QUAN.giadoanduongReportMapRow["DATAROW"].ToString());
            for (int i = 0; i < this._DUONG.Count; i++)
            {
                _DUONG[i].TinhMaxSoLuongGia_Duong();
                iCurrentRow += _DUONG[i].soLuongDoanDuong();
                // get số lượng giá nhiều nhất trên 1 đoạn đường
                if (this.MAX_SOLUONG_GIA_QUAN < _DUONG[i].MAX_SOLUONG_GIA)
                {
                    this.MAX_SOLUONG_GIA_QUAN = _DUONG[i].MAX_SOLUONG_GIA;
                    IMAX_SOLUONG_GIA = i;
                }
            }
            this._EndDataRow = iCurrentRow;
        }

        public void MergeCellDuong(SpreedEdit handler)
        {
            handler.MergeCells(danhSachMergeCell);
        }


        public void CapNhatNhanCotGia(SpreedEdit handler)
        {
            int iColumnGia = Int32.Parse(GIADOANDUONG_QUAN.giadoanduongReportMapRow["GIA"].ToString());
            int iGiaRow = Int32.Parse(GIADOANDUONG_QUAN.giadoanduongReportMapRow["DATAROW"].ToString()) - 1;
            List<GIA_DOAN_DUONG> lGia = this._DUONG[this._iMAX_SOLUONG_GIA].getAllMaxGiaDoanDuong();

            //if(_MAX_SOLUONG_GIA_QUAN == 1)
                //return;

            for (int i = 0; i < lGia.Count; i++)
            {
                handler.updateCellValue(ExcelCommand.GetExcelColumnName(iColumnGia + i), iGiaRow, "Giá Lần " + (i + 1) + " (Tháng " + lGia[i].NGAY_CAP_NHAT.Month + "/" + lGia[i].NGAY_CAP_NHAT.Year + ")", handler.formatIndexs.iYellowFillIndex);
            }
            
        }
    }
}
